<?php
declare (strict_types = 1);

namespace app\common\model\User;

use think\Model;
use app\common\model\Region;

/**
 * @mixin \think\Model
 */
class Address extends Model
{
    // 用户收货地址
    protected $table = 'pre_user_address';

    // 定义追加字段列表 => 前后端分离项目
    protected $append = [
        // 地区字段
        'region_text',
        'region'
    ];

    public function getRegionAttr($value,$data)
    {
        $province = Region::where(['code' => $data['province']])->find();
        $city = Region::where(['code' => $data['city']])->find();
        $district = Region::where(['code' => $data['district']])->find();

        $data = [
            $province['name'],
            $city['name'],
            $district['name'],
        ];

        return $data;
    }

    // 定义不存在字段 region_text => RegionText
    public function getRegionTextAttr($value,$data)
    {
        $province = Region::where(['code' => $data['province']])->value('name');
        $city = Region::where(['code' => $data['city']])->value('name');
        $district = Region::where(['code' => $data['district']])->value('name');

        $region_text = '';

        if($province)
        {
            $region_text .= $province . '-';
        }

        if($city)
        {
            $region_text .= $city . '-';
        }

        if($district)
        {
            $region_text .= $district;
        }

        return $region_text;
    }
    
     //给模型定义一个关联查询
     public function provinces()
     {
         /**
          * belongsTo('关联模型', '当前模型外键', '关联模型主键');
          *
          * 第一个参数
          * app\model\Category 关联的模型类名(分类表模型)
          *
          * 第二个参数
          * category_id 外键字段,默认的外键名规则是关联模型名+_id(文章表外键字段)
          *
          * 第三个参数
          * id 关联模型主键,默认是关联模型的 $pk 值(分类表主键字段)
          */
 
         return $this->belongsTo(\app\common\model\Region::class, 'province', 'code');
     }
 
     //查询城市
     public function citys()
     {
         return $this->belongsTo(\app\common\model\Region::class, 'city', 'code');
     }
 
     //查询地区
     public function districts()
     {
         return $this->belongsTo(\app\common\model\Region::class, 'district', 'code');
     }
 
}
